import json
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

url='https://beijing.anjuke.com/'

#   定义浏览器驱动
driver=webdriver.Edge()

#   打开网页
driver.get(url)
#   页面最大化
driver.maximize_window()
time.sleep(5)

#   定位到登录按钮
login_button=driver.find_element(By.XPATH,'//*[@id="ajk-home"]/div[1]/div[6]/div[2]/div/div/div[4]/a[1]')
#   点击登录按钮
login_button.click()


#   跳转到末尾的标签,(不跳转的话driver会一直停留在第一个页面操作，这样就获取不到其他页面的标签)
driver.switch_to.window(driver.window_handles[-1])
time.sleep(10)

# 等待iframe加载完成
"""
这里的iframe是html嵌套html标签的使用方式,即内层的html需要在外面放一个iframe标签包裹，用来标识这是内层的html，所以想要操作内层html里面的
元素，就需要使用如下代码，等待iframe标签加载完成，然后就会进入到内层html标签，就可以最直接使用find_element函数定位元素
"""
iframe_xpath = '/html/body/div[2]/div/div/div[2]/iframe'            #   iframe标签的xpath路径
WebDriverWait(driver,10).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,iframe_xpath)))

# 现在已经切换到了iframe上下文，可以在里面定位元素
input_phone= driver.find_element(By.XPATH, '//*[@id="phoneIpt"]')

# 输入电话号码
input_phone.send_keys("18172411867")
time.sleep(2)

#   定位到勾选框      check:勾选
check=driver.find_element(By.XPATH,'//*[@id="checkagree"]')
check.click()

#   定位到"获取验证码"的位置
yzm=driver.find_element(By.XPATH,'//*[@id="sendSmsBtn"]')
yzm.click()

#   休息一分钟填写验证码，并且点击登录
time.sleep(60)

#   因为登录完了之后更换了网页，所以需要更换驱动存在的对应的网页位置
driver.switch_to.window(driver.window_handles[-1])

#   获取登录之后的cookies信息，并且存入文件
cookies=driver.get_cookies()

#   检查cookies数据
for x in cookies:
    print(type(x))
    print(x)


#   将cookies以json的格式存入文件
for x in cookies:
    with open('cookies.json','a') as file:
        json.dump(x,file)                   #   将字典类型的数据直接写入json文件
        file.write('\n')

time.sleep(2)
#   为了防止自动关闭网页，使用如下代码，就需要在控制台手动回车才会自动关闭网页
# input("控制台回车关闭网页")

driver.quit()













